<?php

namespace Modules\Shop\Entities;

use houdunwang\arr\Arr;
use Illuminate\Database\Eloquent\Model;


//模型
class Category extends Model
{
//    什么都能提交
    protected $guarded = [];

    /**
     * 模型关联
     */
    public function fenlei(){
//        做表关联 ：多对一
//        参数1：要关联的模型 ， 内键  ，外键（多对一内外键取反）
        return $this->belongsTo(Category::class,'pid','id');
    }


    /**
     * ###获得树状结构
     * 详情参考composer 中国镜像 houdunwang ->数组增强
     * @return mixed
     */
    public static function getTreeCategory($cate = null){
//        拿到本类的数据，并把它转为数组型数据
        $data= self::get();
//        dd($data);
        if(!is_null($cate)){
            foreach($data as $k=>$v){
//                向所有数据中追加属性'_selected'这样就能给父级加上默认选中效果了
                $data[$k]['_selected'] = $cate['pid'] == $v['id'];
                //因为修改的时候我们不能让当前选项选择自己为父级分类，所以我们要找到当前要修改的数据，为他加上不能选中的属性
//                Arr::isChild()是hondun命名空间中的方法，用来检测父级是否选中了当前我这定的这些，如果选中了我指定的这些，则返回值为0
                $data[$k]['_disabled'] = $cate['id'] == $v['id'] ||Arr::isChild(
                        $data,
                        $v['id'],
                        $cate['id'],
                        'id',
                        'pid'
                    );
            }
        }
//        复制的数组增强用法
//        return Arr::tree($data, 'cname', $fieldPri = 'id', $fieldPid = 'pid');
        //        参数                   	说明
        //$data                 	数组
        //$title                	需要处理的字段名称
        //$fieldPri             	主键 id
        //$fieldPid             	父 id
//        --------------------
//        进行三元判断 参数（数组，需要处理的字段名称，主键 id ，父 id）
        $category = Arr::tree($data ? $data->toArray():[],'cname','id','pid' );
        return $category;
    }

    /**
     * 判定是否存在子集元素方法
     * @param $cate
     */
    public static function hasChildCategory($cate){
//        获得所有数据
        $data = self::get();
//        dd($data);
//        后盾框架方法：是否已子栏目
           return Arr::hasChild($data, $cate['id'], $fieldPid = 'pid');
//      参数                         说明
//      data                      	操作的数组
//      $cate                      	需要操作的id编号
//      fieldPid                  	父 ID 键名

    }

}
